'use strict';

/**
 * @ngdoc service
 * @name prestamosApp.auth
 * @description Interfaz para realizar autenticación y autorización.
 */
var Factories = angular.module('Factories');

Factories.factory('Auth', function (Sesion) {

    var auth = {

      /**
       * Permite iniciar sesión en la aplicación.
       * @param  {object} credenciales Credenciales con las cuales se inicia la
       *                               sesión.
       * @return {boolean}             True si se inicia sesión correctamente,
       *                               false en caso contrario.
       */
      login: function (credenciales) {
        if (!angular.isObject(credenciales)) {
          return false;
        }

        // TODO: Conectar login con backend.
        if (credenciales.nombreUsuario === 'username1' &&
          credenciales.password === 'password') {
          credenciales.cedula = 1;
          credenciales.rol = {id: 1, descripcion: 'Admin'};
        }

        if (credenciales.nombreUsuario === 'username2' &&
          credenciales.password === 'password') {
          credenciales.cedula = 2;
          credenciales.rol = {id: 2, descripcion: 'Investigador'};
        }

        if (credenciales.rol) {
          Sesion.crear(credenciales, 'token');
          return true;
        }

        return false;
      },

      /**
       * Termina la sesión de la aplicación.
       * @return {boolean} True si se pudo terminar la sesión correctamente,
       *                   false en caso contrario.
       */
      logout: function () {
        // TODO: Conectar logout con backend.
        if (false) {
          return false;
        }

        Sesion.destruir();

        return true;
      },

      /**
       * Determina si el usuario de la sesión actual tiene el rol indicado.
       * @param  {array} roles  Roles que se desean comprobar en el usuario.
       * @return {boolean}      True si el usuario tiene el rol indicado, false
       *                        en caso contrario.
       */
      estaAutorizado: function (roles) {
        var autorizado = roles.some(function (rol) {
          return angular.equals(Sesion.usuario.rol, rol);
        });

        return autorizado;
      }

    };

    return auth;

  });
